45 PRINT "PC-SPELL v1.15 by Andy Wildenberg; modified by Ben Blackstock 11-04-84"
50 INPUT "Drive (path) for pc-spell diskette files ";DDISK$
60 INPUT "Drive (path) for diskette with file to check ";WDISK$
70 PRINT:FILES WDISK$+"*.*"
80 PRINT:INPUT "Which file do you wish spell-checked (c:filespec.txt) ";FILE$
82 CLS
84 LOCATE 10,15:PRINT "Spellcheck in progress of " FILE$
90 OPEN FILE$ FOR INPUT AS #1
100 WHILE NOT EOF(1) AND FRE(0)>5000
110 LINE INPUT #1,A$
120 FOR X=1 TO LEN(A$)
130 Y$=MID$(A$,X,1):Y=ASC(Y$)
140 IF Y>64 AND Y<91 THEN Y$=CHR$(Y+32):GOTO 200
150 IF Y>96 AND Y<123 THEN 200
160 IF Y=39 THEN 200
170 GOSUB 1000
190 NEXT X:GOSUB 1000:WEND:RESET:GOTO 230 'end of loop
200 WORD$=WORD$+Y$:GOTO 190
230 REM sort routine but first clean up old stacks
240 D=2^INT(LOG(CURWORD)/LOG(2))-1:LOCATE 14,15:PRINT "Start:";TIME$;:LOCATE 15,15:PRINT "Predicted time of sort";INT(0.043943*CURWORD^1.26);"seconds."
250 D=2^INT(LOG(CURWORD)/LOG(2))-1
260 FOR I=1 TO CURWORD-D
270 FOR J=I TO 1 STEP -D
280 IF A$(J)<=A$(J+D) THEN 310
290 SWAP A$(J),A$(J+D)
300 NEXT J
310 NEXT I
320 D=INT(D/2):LOCATE 16,15:PRINT "The time is ";TIME$;:IF D>0 THEN 260
330 LOCATE 17,15:PRINT "Stop:";TIME$;
340 REM unique
350 Y=1:A$="" ' initialize all pointers
360 FOR X=1 TO CURWORD
370 IF A$<>A$(X) THEN A$=A$(X):A$(Y)=A$:Y=Y+1:LOCATE 18,15:PRINT "Unique words ";Y;
380 NEXT X
500 REM spelling checker
510 OPEN DDISK$+"dictiona" FOR INPUT AS #1:A$="":OPEN WDISK$+"misspell" FOR OUTPUT AS #2
520 FOR X=1 TO Y
530 IF NOT EOF(1) THEN INPUT #1,A$:IF A$="" THEN 530 ELSE GOSUB 600 ELSE 580
540 IF A$(X)<A$ THEN PRINT #2,A$(X):MISSPELL=MISSPELL+1
550 IF A$(X)=A$ THEN CORRECT=CORRECT+1
560 IF A$(X)>A$ THEN 530
570 LOCATE 24,55:PRINT "found";CORRECT;"not found";MISSPELL;:NEXT X
580 RESET
590 END
600 IF ASC(LEFT$(A$,1))>64 OR LEFT$(A$,1)="'" THEN LASTWORD$=A$:RETURN 'not compressed
610 SAME=ASC(LEFT$(A$,1))-48
620 A$=LEFT$(LASTWORD$,SAME)+MID$(A$,2)
630 LASTWORD$=A$:RETURN
1000 IF LEN(WORD$)>1 THEN A$(CURWORD)=WORD$:CURWORD=CURWORD+1:LOCATE 24,1:PRINT CURWORD;